package com.atguigu.jvm1205;


import java.util.concurrent.TimeUnit;

class MyNumber {
    volatile  int number = 10;

    public void addTo1025() {
        this.number = 1025;
    }
}
/**
 * @author gcq
 * @Create 2020-12-03
 * 线程操作资源类
 * JMM=可见性(通知机制)
 * 可见性是什么？
 *      一个线程操作对共享变量的修改，其他线程能够立刻看到共享变量的修改
 */
public class volatileDemo {
    public static void main(String[] args) {
        MyNumber myNumber = new MyNumber();


        new Thread(() -> {
            System.out.println("*********** come in");
            try {
                // 暂停一会线程
                try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }
                // 修改变量值为1025
                myNumber.addTo1025();
                System.out.println(Thread.currentThread().getName()+"\t Update number=" + myNumber.number);
            } catch (Exception e) {
                e.printStackTrace();
            }
        },"AAA").start();

        // 没使用volatile，程序仍在执行
        while(myNumber.number == 10) {

        }
        System.out.println(Thread.currentThread().getName() + "\t over");
    }
}